In the field of test equipment, it is a problem to efficiently generate an output data stream that emulates the diverse patterns of real world data transmissions. This is especially pertinent in the field of data communications for remotely located devices wherein the equipment must be operational under adverse conditions, and responsive to various patterns of input data traffic. In order to exhaustively test such equipment, diverse patterns of data traffic as well as varying traffic loads must be simulated to ensure that the equipment is operational under the conditions that exist in their installed environment.
The test equipment typically sends multiple streams of network traffic through a system under test (SUT) and forwards the streams to multiple output ports. The SUT can, for example, be a router.
For example, an IP address is 32 bits wide and consists of two components: 1) the network part and 2) the host part. These two parts can have variable width. For example, a large network containing a very large number of hosts uses only a small number of bits to represent the network part (e.g. 8 bits) and a larger number of bits (e.g., 24 bits) to represent the host part. In this case, there are 2^24 distinct host addresses possible in the network.
Alternatively, a smaller network may use a larger number of bits for representing the network part of the address (e.g. 24 bits) and use a smaller number of bits (e.g., 8 bits) for representing the host part, thereby only allowing a network of 256 (i.e., 2^8) different hosts.
An IP router typically forwards packets based on the network part of the address. IP routers exchange reachability information (e.g., network addresses or routes) between each other by utilizing routing protocols. This routing information is employed to build a forwarding table in the router. The forwarding table contains instructions on how to forward packets, whose destination address matches a particular entry in the forwarding table.
For example, an instruction may specify that if a packet matches IP Address 1/8 (where 1 is the network address, and 8 is the number of bits used to indicate the network), then forward the packet to output port X. Therefore, any packet received, where the top 8 bits of the destination IP address equals one, is forwarded to output port X.
Consequently, in order to effectively test an IP router, a mechanism must be used to configure routes (e.g., network addresses) in the forwarding table consisting of many different network sizes and network addresses.
Conventional test equipment utilize traffic generators that are either memory-based or use multiple independent traffic sources. Unfortunately, both of these approaches have their disadvantages.
Memory-based approaches transmit the contents of a memory. Although this scheme allows a large number of different packets to be sent, this approach offers very little granularity in terms of allowing a tester to control the distribution or profile of individual packets. For example, it is not possible to configure these types of traffic generators to mix very high rate traffic (e.g., traffic having data rates in the order of
The second approach utilizes multiple independent traffic sources. Each source typically can only transmit a single packet or a relatively small number of different packets (e.g., 100 packets). However, each source can have an independent profile or distribution, thereby allowing high rate traffic and low rate traffic to be multiplexed.
Unfortunately, this approach is unable to configure routes (e.g., network addresses) in a forwarding table that consists of many different network sizes and network addresses.
One scheme that is utilized to increase the number of different packets when using the first approach or the second approach is to place an incrementing counter into part of the packet header. When applied to the address field, the incrementing counter allows the tester to generate thousands of different addresses in the packets. However, this scheme has significant drawbacks.
First, it is noted that the set of IP addresses received in incoming packets by a router in the backbone of the Internet are typically not localized to a certain range of addresses. Consequently, an incrementing counter is unable to generate non-consecutive addresses that are needed to simulate real network traffic.
Second, one goal of the traffic generator is to generate traffic that contains destination addresses, where the network part of these addresses corresponds to the routes that have been installed in the forwarding table of the router. The traffic is generated in such a manner that packets are predictably forwarded to a set of expected outgoing interfaces of the SUT, and therefore, received on other ports of the test system.
Within this context, a traffic stream consists of a set of packets transmitted by one port that have a set of destination addresses corresponding to the set of networks (or routes) reachable at a particular output port. These destination addresses have a range of values which depends on the value and length in bits of the network addresses. Unfortunately, it is not possible to generate such a range of addresses using an incrementing counter.
Accordingly, it is desirable to have a scheme consisting of a very large set of possible source/destination address pairs on each stream in order to provide a realistic simulation of operating conditions. Furthermore, it is desirable for there to be a mechanism that provides realistic traffic stimuli to the SUT and simulates a traffic mix that is representative of what the SUT is subjected to when connected to a live network (e.g., the Internet).
Moreover, the router (or SUT) may actually exhibit different behavior or performance based on the distribution of addresses (based on value and/or size of network prefix length). In other words, a distribution of addresses generated by an incrementing counter may not adequately test the SUT.
Based on the foregoing, it is desirable to provide a traffic stream generator that overcomes the disadvantages discussed above.